package com.sqllog.admin.sql.domain;

import cn.hutool.core.util.StrUtil;
import com.sqllog.admin.framework.domain.request.PageDomain;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 查询参数
 *
 * @author chennengcheng
 * @date 2022-01-05 11:36
 * @remark
 */

@Getter
@Setter
public class QueryParamInfo extends PageDomain implements Serializable {

    private static final long serialVersionUID = 8001287647031882626L;

    private static Pattern linePattern = Pattern.compile("_(\\w)");

    /**
     * 数据库
     */
    private String dataBaseName;

    /**
     * 集合名
     */
    private String collectionName;

    /**
     * 表名
     */
    private String tableName;

    /**
     * 年月份
     */
    private String yearOfMonth;

    /**
     * sql类型 update、delete、insert、alert、create、drop、rename
     */
    private String type;

    /**
     * sql 修改对象类型 table、row,  表修改或者行修改
     */
    private String objType;

    /**
     * 记录 创建时间
     */
    private Date createTimeStart;

    /**
     * 记录 创建时间
     */
    private Date createTimeEnd;

    /**
     * 指定id值
     */
    private String id;

    /**
     * sql 内容
     */
    private String sql;

    /**
     * 排序字段
     */
    private String sort;

    /**
     * 排序类型
     */
    private String order;

    /**
     * 第几页
     */
    private Integer page = 1;

    /**
     * 页条数
     */
    private Integer limit = 50;

    /**
     * 默认降序
     *
     * @return
     */
    public String getOrder() {
        if (StrUtil.isBlank(order)) {
            return "DESC";
        } else {
            return order.toUpperCase();
        }
    }

    /**
     * 默认创建时间
     *
     * @return
     */
    public String getSort() {
        if (StrUtil.isNotBlank(sort)) {
            return lineToHump(sort);
        } else {
            return "createDate";
        }
    }

    /**
     * 下划线转驼峰
     */
    public static String lineToHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
